//
//  NSDictionary+CrashIntercept.m
//  Pods
//
//  Created by 余思豪 on 2022/9/22.
//

#import <Foundation/Foundation.h>
#import <objc/message.h>

@implementation NSDictionary (CrashIntercept)

// 重写初始化方法,增加非空判断
+ (instancetype)dictionaryWithObjects:(const id _Nonnull __unsafe_unretained *)objects forKeys:(const id<NSCopying> _Nonnull __unsafe_unretained *)keys count:(NSUInteger)cnt {
    NSUInteger keyCnt = 0, valueCnt = 0;
    id _Nonnull __unsafe_unretained const * _Nullable objPtr = objects; // 指向objects初始位置
    id _Nonnull __unsafe_unretained const * _Nullable keyPtr = keys;    // 指向keys初始位置
    // 遍历找到为key nil的位置
    for (   ; keyCnt < cnt; keyCnt ++, objPtr++) {
        if (*objPtr == 0) {
            break;
        }
    }
    // 遍历找到为key nil的位置
    for (   ; valueCnt < cnt; valueCnt ++, keyPtr++) {
        // 遍历找到为key nil的位置
        if (*keyPtr == 0)  {
            break;
        }
    }
    // 找到最小值
    NSUInteger minCnt = MIN(keyCnt, valueCnt);
    // 构造合适的key,object array
    NSArray *vs = [NSArray arrayWithObjects:objects count:minCnt];
    NSArray *ks = [NSArray arrayWithObjects:keys count:minCnt];
    // 用下面的方法构造
    return [self dictionaryWithObjects:vs forKeys:ks];
}

@end
